經過這幾天的努力,我們的 RAG 問答系統已經快要完成啦!
目前我們能透過使用者的問題進行資料的檢索,並且檢索的結果是符合我們的預期的。那麼接下來,我們就要將這些資料提供給 LLM 進行參考後生成回覆,我們就快開始吧~
首先,我們要先設置欲使用的 LLM,這裡我推薦各位一個好用的平台 Ollama
Ollama 不僅是一隻可愛的羊駝,它還是一個專門設計用來運行 LLM 的本地端環境或服務平台。它允許我們在本地機器上部署和運行不同的 LLM,而不需要依賴於雲端服務。Ollama 能夠提供一個靈活且高效的框架來運行 LLM,並且允許用戶自定義模型的參數。我自己在實際使用時,不僅能夠感覺它的速度快,在第一次操作時也比較容易使用。
在大概了解 Ollama 後,我們就來進行 LLM 的實例化吧~
llm = ChatOllama(
model="gemma2",
base_url="http://127.0.0.1:11434",
temperature=0
)
這裡我們透過 ChatOllama 來對接 Ollama 的服務端,而在上面這段程式碼中,設置了一些參數:
在我們設置好 LLM 後,接著,我們還要準備一個提示,用來告訴 LLM 如何處理使用者的問題,我們稱之為 Prompt。
Prompt 是用來向 LLM 提供輸入訊息的一種格式化方式。Prompt 的目的是提供一個明確的指示,告訴模型如何處理使用者的問題,以及如何結合檢索到的參考資料來生成答案。千萬不要小看 Prompt 的威力!不同的 Prompt 會影響 LLM 的回覆,我也花了好多的時間在調整 Prompt 呢~
現在我們來設置我們的 Prompt 吧:
PROMPT = """你是一位負責處理使用者問題的助手,你必須詳讀參考資料中的不同段落的資訊來回答使用者問題,不要回答沒有在參考資料中的資訊。
若沒有辦法從以下參考資料中取得資訊或參考資料為空白,則回答"沒有相關資料",且不須回覆 theme。
若有辦法從以下參考資料中取得資訊,請在回答的最後加入 theme。
注意:輸出必須使用繁體中文。"""
這個 Prompt 就是我們要提示給 LLM,讓 LLM 依照這個提示來處理使用者的問題。
現在我們設置完 Prompt 後,我們今天的工作就差不多完成啦~
明天我們就要來介紹最後一個重要的工具 → LangChain
參考文獻:
https://ollama.com/blog/embedding-models